name: build smoke tests with source

on:
  push:
    branches:
      - stop-running
env:
  RUST_BACKTRACE: 1

jobs:
  node:
    runs-on: ${{ matrix.platform }}
    timeout-minutes: 40

    strategy:
      fail-fast: false
      matrix:
        platform: [ubuntu-latest, macos-latest, windows-latest]
        example:
          - name: GatsbyThemedSite
            folder: react/gatsby-themed-site
            executable: gatsby-themed-site-app
          - name: CRAApp
            folder: react/create-react-app
            executable: app
          - name: NextjsApp
            folder: react/next.js
            executable: app
          - name: VanillajsMonolithApp
            folder: vanillajs/monolith
            executable: app
          - name: quasar-app
            folder: vue/quasar-app
            executable: app
          - name: svelte-app
            folder: svelte/svelte-app
            executable: app
        include:
          - platform: ubuntu-latest
            CARGO_HOME: ~/.cargo
            releaseFolder: target/release/bundle/deb
            ext: _0.1.0_amd64.deb
          - platform: macos-latest
            CARGO_HOME: ~/.cargo
            releaseFolder: target/release/bundle/osx
            ext: .app
          - platform: windows-latest
            CARGO_HOME: ~/.cargo
            releaseFolder: target/release
            ext: .x64.msi

    steps:
      - name: checkout tauri
        uses: actions/checkout@v2
      - name: checkout examples
        uses: actions/checkout@v2
        with:
          repository: tauri-apps/examples
          ref: latest
          path: examples
      - name: install rust stable
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          profile: minimal
      - name: install webkit2gtk (ubuntu only)
        if: matrix.platform == 'ubuntu-latest'
        run: |
          sudo apt-get update
          sudo apt-get install -y webkit2gtk-4.0
      - name: cache rust bin
        uses: actions/cache@v1
        with:
          path: ${{ format('{0}/bin/', matrix.CARGO_HOME) }}
          key: ${{ runner.OS }}-build-bin-${{ hashFiles('**/Cargo.toml') }}-
      - name: cache rust registry/index
        uses: actions/cache@v1
        with:
          path: ${{ format('{0}/registry/index/', matrix.CARGO_HOME) }}
          key: ${{ runner.OS }}-build-reg-index-${{ hashFiles('**/Cargo.toml') }}-
      - name: cache rust registry/cache
        uses: actions/cache@v1
        with:
          path: ${{ format('{0}/registry/cache/', matrix.CARGO_HOME) }}
          key: ${{ runner.OS }}-build-reg-cache-${{ hashFiles('**/Cargo.toml') }}-
      - run: cargo install --path ./cli/tauri-bundler --force
      - name: install cli deps via yarn
        working-directory: ./cli/tauri.js
        run: yarn
      - name: build cli & api
        working-directory: ./cli/tauri.js
        run: yarn build
      - name: cache node modules
        uses: actions/cache@v1
        with:
          path: ${{ format('examples/node/{0}/node_modules', matrix.example.folder) }}
          key: ${{ runner.OS }}-build-${{ hashFiles(format('examples/node/{0}/yarn.lock', matrix.example.folder)) }}
          restore-keys: ${{ runner.OS }}-build-${{ env.cache-name }}-
      - name: install via yarn
        working-directory: ./examples/node/${{ matrix.example.folder }}
        run: yarn
      - name: build example
        working-directory: ./examples/node/${{ matrix.example.folder }}
        run: yarn build
      - name: yarn tauri build
        working-directory: ./examples/node/${{ matrix.example.folder }}
        run: yarn tauri:source:build
      - uses: actions/upload-artifact@v1
        if: success()
        with:
          name: ${{ matrix.example.name }}(${{ matrix.platform }})
          path: ${{ format('./examples/node/{0}/src-tauri/{1}/{2}{3}', matrix.example.folder, matrix.releaseFolder, matrix.example.executable, matrix.ext ) }}
